﻿#define _CRT_SECURE_NO_WARNINGS 1 
#include <stdio.h>

//int main()
//{
//	int arr[10] = { 0 };
//	//Ϊ1-10
//	int i = 0;
//	for (i = 0; i < 10; i++)
//	{
//		arr[i] = i + 1;
//	}
//	for (i = 0; i < 10; i++)
//	{
//		printf("%d ", arr[i]);
//	}
//	return 0;
//}

//
//int Add(int x, int y)
//{
//	return x + y;
//}
//
//int main()
//{
//	int a = 10;
//	int b = 20;
//	int r = Add(a, b);
//	printf("%d\n", r);
//	return 0;
//}
//

#include <stdio.h>

//int main()
//{
//    int arr[10] = { 0 };
//    int num = 100;
//    char c = 'w';
//
//    int i = 0;
//    for (i = 0; i < 10; i++)
//    {
//        arr[i] = i;
//    }
//    return 0;
//}
//#include <stdio.h>

//int main()
//{
//	int n = 0;
//	scanf("%d", &n);
//	//求n的阶乘
//	int i = 0;
//	int ret = 1;
//	for (i = 1; i <= n; i++)
//	{
//		ret *= i;
//	}
//	printf("%d\n", ret);
//
//	return 0;
//}

//1!+2!+3!+4!+...10!
//1!+2!+3! = 1 + 2 + 6 = 9
//int main()
//{
//	int n = 0;
//	int i = 0;
//	int ret = 1;
//	int sum = 0;//和
//	for (n = 1; n <= 10; n++)
//	{
//		ret = 1;
//		for (i = 1; i <= n; i++)
//		{
//			ret *= i;
//		}
//		sum += ret;
//	}
//	
//	printf("%d\n", sum);
//
//	return 0;
//}

//
//int main()
//{
//	int n = 0;
//	int i = 0;
//	int ret = 1;
//	int sum = 0;//和
//	for (n = 1; n <= 10; n++)
//	{
//		ret *= n;
//		sum += ret;
//	}
//
//	printf("%d\n", sum);
//
//	return 0;
//}

//#include <stdio.h>
//
//int main()
//{
//    int i = 0;
//    int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
//    printf("&i      = %p\n", &i);
//    printf("&arr[0] = %p\n", &arr[0]);
//    printf("&arr[9] = %p\n", &arr[9]);
//
//
//    /*
//    for (i = 0; i <= 12; i++)
//    {
//        arr[i] = 0;
//        printf("hehe\n");
//    }*/
//    return 0;
//}
//
#include <stdio.h>
//
//int main()
//{
//	printf("hehe\n");
//	return 0;
//}
//
//

//int add(int x, int y)
//{
//	return x + y;
//}
//
//int main()
//{
//	int r = Add(3, 5);
//	return 0;
//}
//


//这是一个递归程序
//但是这个递归程序会明显的引入问题
//int main()
//{
//	printf("hehe\n");
//	main();
//	return 0;
//}

//传过去的n不能负数

//int Fac(int n)
//{
//	if (n == 0)
//		return 1;
//	else //n>0
//		return Fac(n - 1) * n;
//}
//
//int main()
//{
//	int n = 0;
//	scanf("%d", &n);
//	int ret = Fac(n);
//	printf("%d\n", ret);
//
//	return 0;
//}

//void Print(int n)
//{
//	if (n > 9)
//		Print(n / 10);
//
//	printf("%d ", n % 10);
//}
//
//int main()
//{
//	int n = 0;
//	scanf("%d", &n);//5
//	Print(n);
//
//	return 0;
//}

//int count = 0;
//
//int Fib(int n)
//{
//	if (n == 3)
//		count++;
//
//	if (n <= 2)
//		return 1;
//	else
//		return Fib(n - 1) + Fib(n - 2);
//}
//
//int main()
//{
//	int n = 0;
//	scanf("%d", &n);
//	int r = Fib(n);
//	printf("%d\n", r);
//	printf("%d\n", count);
//
//	return 0;
//}

//
//int Fib(int n)
//{
//	int a = 1;
//	int b = 1;
//	int c = 1;
//
//	while (n >= 3)
//	{
//		c = a + b;
//		a = b;
//		b = c;
//		n--;
//	}
//	return c;
//}
//
//int main()
//{
//	int n = 0;
//	scanf("%d", &n);
//	int r = Fib(n);
//	printf("%d\n", r);
//	return 0;
//}
//#include <stdio.h>
//
//void set_arr(int brr[], int sz)
//{
//	int i = 0;
//	for (i = 0; i < sz; i++)
//	{
//		brr[i] = -1;
//	}
//}
//
//void print_arr(int brr[], int sz)
//{
//	int i = 0;
//	for (i = 0; i < sz; i++)
//	{
//		printf("%d ", brr[i]);
//	}
//	printf("\n");
//}
//
//int main()
//{
//	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
//	int sz = sizeof(arr) / sizeof(arr[0]);
//
//	print_arr(arr, sz);
//
//	//写一个函数将arr数组的内容全部设置为-1
//	set_arr(arr, sz); //函数的调用
//
//	//写一个函数，打印arr数组的所有内容
//	print_arr(arr, sz);// -1 -1 -1 ....
//	return 0;
//}

//数组传参的时候，实参应该写数组名
//void print_arr2(int arr[][5], int r, int c)
//void print_arr2(int arr[3][5], int r, int c)
//{
//	int i = 0;
//	for (i = 0; i < r; i++)
//	{
//		int j = 0;
//		for (j = 0; j < c; j++)
//		{
//			printf("%d ", arr[i][j]);
//		}
//		printf("\n");
//	}
//}
//
//int main()
//{
//	int arr[3][5] = { {1,2,3}, {2,3,4,5},{3,4,5,6,7} };
//	//写一个函数打印这个arr数组
//	print_arr2(arr, 3, 5);
//
//	return 0;
//}


//void test(int m)
//{
//
//}
//int main()
//{
//	int n = 10;
//	test(n);
//	return 0;
//}

#include <stdbool.h>
//
//bool is_leap_year(int y)
//{
//	if (((y % 4 == 0) && (y % 100 != 0)) || (y % 400 == 0))
//		return true;
//	else
//		return false;
//}
//
//int get_days_of_month(int y, int m)
//{
//	int days[] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
//	//             0   1   2   3  4   5   6    7   8
//	int d = days[m];
//	//需要一个闰年判断的功能
//	if (is_leap_year(y) && (m == 2))
//	{
//		d += 1;
//	}
//	return d;
//}
//
//int main()
//{
//	int year = 0;
//	int month = 0;
//	scanf("%d %d", &year, &month);//2008 8
//
//	int day = get_days_of_month(year, month); //函数的调用
//	
//	printf("%d\n", day);
//
//	return 0;
//}
//#include <string.h>
////
//int main()
//{
//	/*size_t len = strlen("abcdef");
//	printf("%zd\n", len);*/
//
//	//printf("%zd\n", strlen("abcdef")); //链式访问
//
//	return 0;
//}

//#include <stdio.h>
//int main()
//{
//    printf("%d", printf("%d", printf("%d", 43)));
//    //4321
//    //打印的结果是啥？
//    return 0;
//}
//



//函数的声明
//就是告诉编译器，有一个函数：名字是什么，参数是什么，返回类型是什么
//int is_leap_year(int y); //函数的声明
//int is_leap_year(int); //函数的声明中形式参数的名字可以省略
//
//int main()
//{
//	int year = 0;
//	scanf("%d", &year);
//	if (is_leap_year(year)) //函数的调用
//		printf("闰年\n");
//	else
//		printf("非闰年\n");
//
//	return 0;
//}
//
////函数的定义
//int is_leap_year(int y)
//{
//	if (((y % 4 == 0) && (y % 100 != 0)) || (y % 400 == 0))
//		return 1; //是
//	else
//		return 0; //不是
//}

//
//#include "add.h"
////导入静态库
//
//#pragma comment(lib, "add.lib")
//
////extern 是用来声明外部符号的
//
////extern int Add(int x, int y);
//
//int main()
//{
//	int a = 0;
//	int b = 0;
//	scanf("%d %d", &a, &b);
//	int c = Add(a, b);
//	printf("%d\n", c);
//
//	return 0;
//}
//


//int main()
//{
//	{
//		int n = 100;
//		printf("1: %d\n", n);//ok
//	}
//
//	printf("2: %d\n", n);//err
//
//	return 0;
//}

//声明外部符号
//extern int n;
//
//void test()
//{
//	printf("3: %d\n", n);//ok
//}
//
//int main()
//{
//	{
//		printf("1: %d\n", n);//ok
//	}
//
//	printf("2: %d\n", n);//ok
//	test();
//
//	return 0;
//}

//
//void test()
//{
//	static int n = 1;//static修饰局部变量
//	n++;
//	printf("%d\n", n);
//}
//
//int main()
//{
//	int i = 0;
//	for (i = 0; i < 5; i++)
//	{
//		test();
//	}
//	return 0;
//}

//声明外部符号 - 全局变量

//extern int n;
//int main()
//{
//	printf("%d\n", n);
//
//	return 0;
//}
//


//extern int Add(int, int);
//
//int main()
//{
//	int a = 0;
//	int b = 0;
//	scanf("%d %d", &a, &b);
//	int c = Add(a, b);
//	printf("%d\n", c);
//
//	return 0;
//}
//int main()
//{
//	//int arr1[10];
//	//int arr2[3 + 6];
//	//int arr3[3][5];
//
//	int n = 10;
//	int arr[n];//clang 是支持的
//
//	return 0;
//}


//#include <stdio.h>
//
//int main()
//{
//    int n = 0;
//    scanf("%d", &n);
//    int arr[n]; //变长数组是不能初始化的
//    int i = 0;
//    //赋值
//    for (i = 0; i < n; i++)
//    {
//        arr[i] = i;
//    }
//    //打印
//    for (i = 0; i < n; i++)
//    {
//        printf("%d ", arr[i]);
//    }
//
//    return 0;
//}
//

//welcome to bit!!!!!!
//********************
//w******************!
//we****************!!
//wel**************!!!
//welc************!!!!
//welco**********!!!!!
//......
//welcome to bit!!!!!!
//#include <string.h>
//#include <windows.h>
//#include <stdlib.h>
//
//int main()
//{
//    char arr1[] = "welcome to bit!!!!!!";
//    char arr2[] = "********************";
//
//    int left = 0;
//    //int right = sizeof(arr1)/sizeof(arr1[0])-2;
//    int right = strlen(arr1) - 1;
//
//    while (left <= right)
//    {
//        arr2[left] = arr1[left];
//        arr2[right] = arr1[right];
//        printf("%s\n", arr2);
//        Sleep(1000);//睡眠函数，1000毫秒
//        system("cls");//清理屏幕信息的
//        left++;
//        right--;
//    }
//    printf("%s\n", arr2);
//
//	return 0;
//}






//int main()
//{
//	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
//	
//	int n = 17;
//	//在数组arr中找n的值，找到了就打印下标，找不到就打印：找不到
//	//暴力的方法
//	//对数组的元素进行遍历，拿n和每个元素进行比较
//	int i = 0;
//	int sz = sizeof(arr) / sizeof(arr[0]);//10
//	for (i = 0; i < sz; i++)
//	{
//		if (n == arr[i])
//		{
//			printf("找到了，下标是:%d\n", i);
//			break;
//		}
//	}
//	if(i == sz)
//		printf("找不到\n");
//
//	return 0;
//}

//int main()
//{
//	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
//
//	int n = 7;
//	//在数组arr中找n的值，找到了就打印下标，找不到就打印：找不到
//	//暴力的方法
//	//对数组的元素进行遍历，拿n和每个元素进行比较
//	int i = 0;
//	int sz = sizeof(arr) / sizeof(arr[0]);//10
//	int found = 0;//假设没找到
//	for (i = 0; i < sz; i++)
//	{
//		if (n == arr[i])
//		{
//			printf("找到了，下标是:%d\n", i);
//			found = 1;
//			break;
//		}
//	}
//	if (found == 0)
//		printf("找不到\n");
//
//	return 0;
//}
#include <stdbool.h>
//
//int main()
//{
//	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
//
//	int n = 7;
//	//在数组arr中找n的值，找到了就打印下标，找不到就打印：找不到
//	//暴力的方法
//	//对数组的元素进行遍历，拿n和每个元素进行比较
//	int i = 0;
//	int sz = sizeof(arr) / sizeof(arr[0]);//10
//	bool found = false;//假设没找到
//	for (i = 0; i < sz; i++)
//	{
//		if (n == arr[i])
//		{
//			printf("找到了，下标是:%d\n", i);
//			found = true;
//			break;
//		}
//	}
//	if (!found)
//		printf("找不到\n");
//
//	return 0;
//}


//
//int main()
//{
//	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
//
//	int n = 17;
//	//在数组arr中找n的值，找到了就打印下标，找不到就打印：找不到
//	//二分查找方法
//	int left = 0;
//	int right = sizeof(arr) / sizeof(arr[0]) - 1;
//	bool found = false;
//	while (left <= right)
//	{
//		int mid = (left + right) / 2;
//		if (arr[mid] < n)
//			left = mid + 1;
//		else if (arr[mid] > n)
//			right = mid - 1;
//		else
//		{
//			printf("找到了，下标是:%d\n", mid);
//			found = true;
//			break;
//		}
//	}
//	if (found == false)
//		printf("找不到\n");
//
//	return 0;
//}
//

//#include <math.h>

//int main()
//{
//	double r = sqrt(16);
//	printf("%.1lf\n", r);
//	return 0;
//}



//int main()
//{
//	int a = 0;
//	int b = 0;
//	//输入
//	scanf("%d %d", &a, &b);
//	//计算 - 加法运算
//	int c = a + b;
//	//输出
//	printf("c = %d\n", c);
//
//	return 0;
//}

//函数的定义 - 实现这个函数
//int Add(int x, int y)
//{
//	int z = 0;
//	z = x + y;
//	return z;
//}

//int Add(int x, int y)
//{
//	return x + y; //返回的是表达式，是把x+y的结果计算出来，然后返回计算的结果
//}
//
//int main()
//{
//	int a = 0;
//	int b = 0;
//	//输入
//	scanf("%d %d", &a, &b);
//	//计算 - 加法运算
//	int c = Add(a, b); //调用Add函数
//	//输出
//	printf("c = %d\n", c);
//
//	return 0;
//}
//


//写一个函数判断一个数是否是奇数

//bool is_odd(int n)
//{
//	if (n % 2 == 1)
//		return true;
//	else
//		return false;
//}

//int is_odd(int n)
//{
//	if (n % 2 == 1)
//		return 1;
//	else
//		return 0;
//}
//
//int main()
//{
//	int n = 0;
//	scanf("%d", &n);
//	
//	//if (is_odd(n) == 1)
//	//	printf("是奇数\n");
//	//else
//	//	printf("是偶数\n");
//
//	if (is_odd(n))
//		printf("是奇数\n");
//	else
//		printf("是偶数\n");
//
//	return 0;
//}


//void test(int n)
//{
//	//n是负数，就直接返回
//	//n是大于20,就打印呵呵
//	//否则就打印哈哈
//	if (n < 0)
//		return;
//	else if (n > 20)
//		printf("hehe\n");
//	else
//		printf("haha\n");
//
//	printf("heihei\n");
//}
//
//int main()
//{
//	int n = 0;
//	scanf("%d", &n);
//	test(n);
//	return 0;
//}


//int test()
//{
//	//....
//	return 3.4;
//}
//
//int main()
//{
//	int r = test();
//	printf("%d\n", r);
//
//	return 0;
//}

//int test()
//{
//	int n = 0;
//	scanf("%d", &n);
//	if (n > 0)
//		return 1;
//	//n<=0 返回什么？不清楚
//	//逻辑漏洞
//}
//
//int main()
//{
//	test();
//	return 0;
//}


//函数的返回类型不写的时候，编译器会认为返回类型是int
//int test()
//test()
//{
//	printf("hehe\n");
//	int r = 4 + 5;
//}
////建议：
////如果有明确的返回类型，就直接写清楚
////如果不需要返回就写void
//
//
//int main()
//{
//	int r = test();
//	printf("%d\n", r);
//	return 0;
//}
//

//int test()
//{
//	int a = 10;
//	int b = 20;
//	int c = a + b;
//}
//
//int main()
//{
//	int r = test();
//	printf("%d\n", r);
//	return 0;
//}

